// 获取mongoose
const mongoose = require("mongoose");

//get商品类型列表数据
const get = async ({
    curPage,
    eachPage
}) => {
    // 强制转换类型 number转string
    (curPage = ~~curPage), (eachPage = ~~eachPage);
    const data = {
        total: 0,
        maxPage: 0,
        rows: [],
    }

    // 是获取数据库电影的数据
    const totalTypeModel = mongoose.model("totalType");
    // 获取当前model映射的那个集合里存在的文档总数
    data.total = await totalTypeModel.countDocuments();
    // Math.ceil往上取整
    data.maxPage = Math.ceil(data.total / eachPage);

    //查询数据库所有数据 跳过（当前页-1）*当前页显示数据  limit 查询多少条数据  sort 排序  execute 立即执行
    const skipNum = (curPage - 1) * eachPage;
    data.rows = await totalTypeModel.find().skip(skipNum).limit(eachPage).sort({
        _id: -1
    }).exec();


    return data;
};



//新增商品总类型
const addTatolType = async ({ totalTypeName }) => {
    console.log(totalTypeName, "36");
    //先获取到商品类型对应的数据库集合
    const totalTypeModel = mongoose.model("totalType");
    //通过用户输入的商品类型名先查找 看是否存在
    const data = await totalTypeModel.find({ totalType_name: totalTypeName })
    //如果data有长度 证明此商品类型在数据库已经存在
    if (data.length) {
        return false
    } else {
        //否则，将此商品类型添加到数据库
        return await totalTypeModel.create(
            { totalType_name: totalTypeName }
        )
    }
}
//删除商品类型
const deleteTatolType = async ({ _id }) => {
    //先获取到商品类型对应的数据库集合
    const totalTypeModel = mongoose.model("totalType");
    //通过用户输入的商品类型名先查找 看是否存在
    const data = await totalTypeModel.remove({ _id })
    return data
}

//修改商品类型
const amendTotalType = async (newType) => {

    //先获取到商品类型对应的数据库集合
    const totalTypeModel = mongoose.model("totalType");
    // 修改数据   updateOne第一个参数必须是对象， 需要修改类型的id值 
    await totalTypeModel.updateOne({ _id: newType._id }, newType);

}


//获取子类
const getChilType = async ({
    curPage,
    eachPage
}) => {

    (curPage = ~~curPage), (eachPage = ~~eachPage);
    const data = {
        total: 0,
        maxPage: 0,
        rows: [],
        TatolData: []
    }
    //先获取到商品类型对应的数据库集合
    const totalTypeModel = mongoose.model("totalType");
    //获父类数据库数据库所有信息
    data.TatolData = await totalTypeModel.find()


    const childTypeModel = mongoose.model("childType")

    data.total = await childTypeModel.countDocuments();

    // Math.ceil往上取整
    data.maxPage = Math.ceil(data.total / eachPage);

    //查询数据库所有数据 跳过（当前页-1）*当前页显示数据  limit 查询多少条数据  sort 排序  execute 立即执行
    const skipNum = (curPage - 1) * eachPage;
    data.rows = await childTypeModel.find().skip(skipNum).limit(eachPage).populate("Father_id").exec();

    return data

}
// addChild({Father_id,childType_name})

const addChild = async ({ Father_id, childType_name }) => {
    const childTypeModel = mongoose.model("childType")
    const data = await childTypeModel.create({ Father_id, childType_name })
    return data
}


const selforTotal = async ({ Father_id }) => {
    console.log(Father_id);
    const childTypeModel = mongoose.model("childType")
    const data = await childTypeModel.find({ Father_id }).populate("Father_id").exec()
    return data
}

// 删除一个子类

const deloneChild = async (_id) => {
    const childTypeModel = mongoose.model("childType")
    const data = await childTypeModel.deleteOne({ _id })
    return data
}

// 修改子类名字
const resChildType = async ({ childType_name, _id }) => {
    console.log(childType_name, _id);
    const childTypeModel = mongoose.model("childType")
    const data = await childTypeModel.updateOne({ _id }, { childType_name })
    return data
}


const getAssType = async () => {
    // 商品总类型
    const totalTypeModel = mongoose.model("totalType");
    //商品子类型
    const childTypeModel = mongoose.model("childType")
    // 所有总类型
    const TotalAll = await totalTypeModel.find()
    // 所有子类型
    const ChildAll = await childTypeModel.find()
    // 关联类型
    const assType = []
    // 关联算法
    TotalAll.map((item) => {
        let child = []
        ChildAll.map((item1) => {
            if (item._id.toString() == item1.Father_id.toString())child.push({ label: item1.childType_name, value: item1._id, Father_id: item1.Father_id })
            
        })
        assType.push({ label: item.totalType_name, value: item._id, children: child })
    })

    return {TotalAll,ChildAll,assType}
}


//暴露接口 给Router
module.exports = {
    get,
    addTatolType,
    deleteTatolType,
    amendTotalType,
    getChilType, addChild, selforTotal, deloneChild, resChildType,getAssType
}